package main

import (
	"fmt"

	lua "github.com/yuin/gopher-lua"
)

func main() {
	// 创建一个新的 Lua 虚拟机
	L := lua.NewState()
	defer L.Close()

	// 加载并执行 Lua 脚本
	if err := L.DoString(`
        -- 定义一个 Lua 函数
        function add(a, b)
            return a - b
        end
    `); err != nil {
		panic(err)
	}

	// 调用 Lua 函数
	if err := L.CallByParam(lua.P{
		Fn:      L.GetGlobal("add"), // 获取全局函数 "add"
		NRet:    1,                  // 期望返回 1 个结果
		Protect: true,               // 启用保护模式
	},
		lua.LNumber(3),
		lua.LNumber(4)); err != nil {
		panic(err)
	}

	// 获取并打印返回值
	ret := L.Get(-1)            // 获取栈顶元素
	fmt.Println("Result:", ret) // 输出: Result: 7
}
